package behavior.visitor;

import java.io.File;

/**
 * @author lzp
 * @Date:2023/3/8
 * @description: 持有文件夹和文件的数据结构
 */
public class FileStructure {

	/**
	 * 根目录
	 */
	private File path;

	public FileStructure(File path) {
		this.path = path;
	}


	/**
	 * 使用传入的访问者进行处理
	 *
	 * @param visitor
	 */
	public void handle(Visitor visitor) {
		scan(this.path, visitor);
	}

	/**
	 * 扫描文件
	 *
	 * @param file
	 * @param visitor
	 */
	private void scan(File file, Visitor visitor) {
		if (file.isDirectory()) {
			// 访问者处理文件夹
			visitor.visitDir(file);
			// 递归处理文件
			for (File item : file.listFiles()) {
				scan(item, visitor);
			}
		} else {
			// 访问者处理文件
			visitor.visitFile(file);
		}
	}

}
